class Date{
    //就地初始化：在声明成员变量时，就直接给出了初始值。
    public int year;
    public int month;
    public int day;

    public void setDate(int year,int month,int day){
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public Date(){
        System.out.println("一个不带参数的构造方法");//在类中我们会先通常去调用构造方法，然后再调用成员方法
    }

    public void printDate(){
        System.out.println(this.year+ "年" + this.month + "月" + this.day + "日");
    }

    public static void main(String[] args) {
        Date date = new Date();
        //默认初始化
        date.printDate();//这时候我们没有进行赋值，那么成员变量便会自己赋值为0，或者null
    }
}


class Student{
    //成员变量
    private String name;//此时这个属性只能用在类中。
    private int age;
    //成员方法
    public void eat()
    {
        System.out.println(this.name + "吃饭了");
        this.show();//这种调用的不是构造方法，那么this可以不是在第一行
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    //鼠标右键generate，选中Getter and Setter，就可以快速创建可以修改还赋值的函数，在封装的情况下（比如利用private来实现封装）

    public String getName(){
        return this.name;
    }
    public void setName(String name){
        this.name = name;
    }
    //构造
//    public Student(String name,int age){
//


//        this.name = name;
//        this.age = age;
//        System.out.println("带有2个参数的构造方法");
//    }
    //这个时候我们可以用鼠标右键generate,选中Constructor，就可以创建带有目标参数的构造方法
    //但是只能创建带有参数的构造方法
    //Alt+Insert

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student(){
        this("cc",19);
        //this();是调用类当中的其他构造方法，比如这个时候就会调用了public Student(String name,int age)这个方法
        //只能在当前的构造方法内部来使用，并且只能在第一行
        System.out.println("不带参数的构造方法");
    }
    public void show(){
        System.out.println("姓名：" + this.name + "年龄" + this.age);
    }
}
public class TestDemo {

    public static void main(String[] args) {
        Student student = new Student();
        //student.name = "why";
        //这个时候用private修饰name，那么这个时候只能在类中进行赋值和使用，一旦出了这个类，就报错
        //如果这个时候还想对name赋值和使用，那么我们就要在类中定义方法。
        //比如我们有定义了getName和setName方法，这时候调用这两个方法；
        student.setName("why");
        System.out.println(student.getName());
    }

}
